package inutan.robot;

import org.ricks.boot.AbstractBootstrap;
import org.ricks.boot.Scan;
import org.ricks.common.ModularContext;
import org.ricks.common.conf.RicksPropertiesLoader;
import org.ricks.common.lang.Logger;
import org.ricks.common.utils.TimeUtils;
import org.ricks.net.NetContext;
import org.ricks.protocol.Protocol;
import org.ricks.protocol.ProtocolManager;

import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author chenwei
 * @Description: 注解方式启动server 弊端 只能启动一个服务，但是项目需求可能启动多个server
 * 2022年12月2日 18:37:31 后面找时间这部分进行优化
 * @date 2020/7/914:12
 */
@Scan("inutan.robot")
public class RobotBootstrap extends AbstractBootstrap {

    @Override
    protected void onStart() {
        long startTime = TimeUtils.now();
        try {
            ModularContext.me().scan(Set.of("inutan.robot"));
            RicksPropertiesLoader.loadingProperties();
            Set<Class<?>> classes = ModularContext.me().projectClasses();
            Set<Class<?>> protocolClasses = classes.stream().filter(c -> c.isAnnotationPresent(Protocol.class)).collect(Collectors.toSet());
            ProtocolManager.initProtocolAuto(protocolClasses);
            NetContext.me().init();
        } finally {
            long endTime = TimeUtils.now();
            System.out.println("============ app started on time:"+ (endTime - startTime) + " ms ===========");
        }
    }

    @Override
    protected void onStop() {
        Logger.info("机器人进程已停止");
    }

}
